---
title: 中间件技术
description: 常见中间件技术及其在架构中的作用
date: 2025-06-01
sidebar_position: 8
---

## 概述
在一个<RedSpan>分布式系统环境中处于操作系统和应用程序之间的软件</RedSpan>，可以在 <RedSpan>不同的技术之间共享资源</RedSpan>，将不同的操作系统、数据库、异构的网络环境以及若干应用 <RedSpan>结合成一个有机的协同工作整体。</RedSpan>

* 中间件一般都是应用在分布式系统。

中间件位于 <RedSpan>客户机/服务器的操作系统之上，管理计算机资源和网络通信</RedSpan>，有如下特点
* 中间件是 <RedSpan>一类软件</RedSpan>，而非一种软件。
* 中间件不仅仅<RedSpan>实现互联</RedSpan>，还要实现<RedSpan>应用之间的互操作</RedSpan>。
* 中间件是 <RedSpan>基于分布式处理的软件</RedSpan>，<RedSpan>最突出的特点是其网络通信功能</RedSpan>。

中间件的任务是 <RedSpan>使应用程序开发变得更加容易</RedSpan>，通过提供统一的程序抽象，<RedSpan>隐藏异构系统和分布式系统下低级别编程的复杂度。</RedSpan>
## 中间件分类
### 数据库访问中间件
<RedSpan>通过一个抽象层访问数据库</RedSpan>，从而 <RedSpan>允许使用相同或相似的代码访问不同的数据库资源。</RedSpan>典型的技术如 <RedSpan> Windows 平台的 ODBC 和 Java 平台的 JDBC 等</RedSpan>

### 过程远程调用 RPC
是一种广泛使用的 <RedSpan>分布式应用程序处理方法。</RedSpan>一个应用程序 <RedSpan>使用 RPC 来“远程”执行一个位于不同地址空间内的过程</RedSpan>，从效果上看和执行本地调用相同。


### 面向消息的中间件（MOM）
利用<RedSpan>高效可靠的消息传递机制</RedSpan>进行<RedSpan>平台无关的数据交流</RedSpan>，并可<RedSpan>基于数据通信进行分布式系统的集成</RedSpan>。通过提供消息传递和消息排队模型，可在 <RedSpan>分布式环境下扩展进程间的通信</RedSpan>，并 <RedSpan>支持多种通信协议</RedSpan>、语言、应用程序、硬件和软件平台。典型的产品如 IBM 的 MQ Series

### 分布式对象中间件
随着 <RedSpan>对象技术和分布式计算技术</RedSpan>的发展，两者相互结合形成了分布式对象技术，并发展成为当前软件技术的主流方向。典型的产品如 OMG 的 CORBA、Sun 的 RMI/EJB、Microsoft 的 DCOM 等


### 事务中间件
也称<RedSpan>事务处理监控器（TPM）</RedSpan>，最早出现在大型机上。事务处理监控程序 <RedSpan>位于客户和服务器之间，完成事务管理与协调、负载均衡、失效恢复等任务，提高系统的整体性能。</RedSpan>

## J2EE核心技术
J2EE 平台采用了 <RedSpan>多层分布式应用程序模型</RedSpan>，实现不同逻辑功能的应用程序被封装到不同的构件中，处于不同层次的构件分别被部署到不同的机器中

![](https://wkq-img.oss-cn-chengdu.aliyuncs.com/20250606000856.png)


* 客户端组件：J2EE应用程序可以是基于 web 方法的，也可以是基于传统方式的静态的 HTML （标准通用标记语言下的一个应用）页面和 Applets 是客户端组件。
* web层组件：J2EE web层组件可以是 JSP 页面或 Servlet。
* 业务层组件：业务层代码的逻辑用来满足特定领域的业务逻辑处理。
* 信息系统层：企业信息系统层处理企业信息系统如啊年包括企业基础建设系统。例如企业资源计划 ERP，大型机事务处理，数据库系统，和其它的遗留信息系统。例如，J2EE 应用组件可能为了数据库连接需要访问企业信息系统。


### JSP+Servlet+JavaBean+DAO
* JSP ： 用于显示、收集数据的部分。<RedSpan>作为 MVC 中的视图 V</RedSpan>。
* Servlet： 作为业务逻辑层，用于处理复杂的业务逻辑，如验证数据、实例化JavaBean、调用 DAO 连接数据库等。<RedSpan>作为 MVC 中的控制器 C</RedSpan>。在其中会调用 Service 方法处理服务。

* JavaBean： 用于数据的封装，方便将查询结果在 servlet 与 jsp 页面之间进行传递。
* DAO：用于连接数据库及进行数据库的操作如：增删改查。<RedSpan>DAO与JavaBean合在一起作为MVC中的模型M</RedSpan>。
* 基本流程，JSP发一个数据到Servlet，servlet接收到后做解析再根据数据调用相应的 service 服务。service 如果有调用数据库就通过 DAO 跟数据库交互，使用 JavaBean 完成封装，返回结果给 servlet servlet 再返回给 JSP。

### 重量级与轻量级之争
* 重量级框架占用资源过多，在开发过程中效率很低；大部分时间花在配置、运行的过程上，修改复杂；单元测试也很麻烦。但在大量运行过程中会表现出优异的效果。也即 <RedSpan>开发麻烦、运行性能高</RedSpan>。
* 轻量级框架提高了开发的速度；立即可以看到结果；做单元测试非常简单；大量的现成可供参考的开源代码。<RedSpan>开发简单，但运行性能低。</RedSpan>

## .NET平台
.NET 框架处于操作系统和 .NET 应用程序之间，<RedSpan>只适用于微软系统</RedSpan>，而 J2EE支持跨平台，任何安装了JVM 的平台。

## .NET和J2EE之争

1. **JVM（将所有JAVA代码都编译为字节码，由JVM解释执行）和CLR（.NET核心技术，类似于JVM，生成中间代码CLR，编译执行）。**

2. **对多层分布式应用的支持**，二者都支持多层分布式应用程序的开发：在表示层的平台支持上，J2EE客户端支持多个平台，.NET只能在微软系统上运行，也因此，.NET会对微软系统上的应用进行优化；在业务层，J2EE占优势，因为有许多开源的项目和代码供参考，开发就变得简单；在数据层，二者都支持多种数据库，都非常优秀。

3. **安全性**，由于JAVA在.NET之后出来，借鉴了.NET优点，JAVA在运行时动态验证，.NET是静态全面验证，二者都非常优秀，不分上下。

4. **应用程序的部署**，J2EE的部署相对来说较复杂，针对不同的系统要特别布置。

